import { defineStore } from 'pinia'
import { reactive, ref, watch, computed, onMounted } from 'vue'
import useapi from '@/api/购物车'
import use_user from '@/stores/use_user'
import * as util from '@/amtf/utils'
import { 商品下单展示 } from "@/utils/商品util.js"
import { storeToRefs } from 'pinia'

export default defineStore('购物车', () => {
	const api = useapi()
	const user = use_user()
	const { hasLogin } = storeToRefs(user)
	const 单项组 = reactive([]);
	const 直接下单项 = reactive({});

	const 显示否 = computed(() => {
		return 单项组.length > 0;
	})
	// 计算选中单品列表
	const 选中组 = computed(() => {
		return 单项组.filter((v) => v.selected);
	});
	// const a = reactive({
	// 	显示否,
	// 	选中组
	// })

	async function 增或改(item) {
		console.log('增或改 item: ', item);
		// 单项组.unshift(item)
		if (!item.id) {
			await api.增(item)
			初始化()
		} else {
			await api.改(item)
		}
	}

	// function 取缓存值() {
	// 	let res = uni.getStorageSync('购物车')
	// 	res = JSON.parse(res)
	// 	console.log('storage res: ', res);
	// 	console.log('storage res.单项组: ', res.单项组);
	// 	util.数组重予(单项组, res.单项组)
	// }

	async function 初始化() {
		console.log('购物车 初始化: hasLogin.value ', hasLogin.value);
		let res = user.要登录否()
		if (res) {
			let res = await api.查()
			if (res.code === 0) {
				util.数组重予(单项组, res.data.list)
				商品下单展示(单项组)
			} else {
				console.log('出错了 购物车查 res: ', res);
			}
		}
	}

	// function 装饰(arr = []) {
	// 	let res = arr.map((item) => {
	// 		let obj = item
	// 		obj.名称 = item.商品.名称
	// 		obj.图片 = util.予图片路径(item.商品.图片组[0])
	// 		obj.价格 = item.商品.价格
	// 		if (item.sku) {
	// 			obj.价格 = item.sku.价格
	// 			let arra = util.数组中取属性组(item.sku.可选配置值, "value")
	// 			obj.配置 = arra.join(" ")
	// 		}
	// 		return obj
	// 	})
	// 	return res
	// }

	// const 单项组 = ref([]);
	// function add(item) {
	// 	单项组.value.unshift(item)
	// }
	// async function 初始化() {
	// 	let ids = util.数组中取属性组(单项组.value, "skuId")
	// 	console.log('ids: ', ids);
	// 	let res = await 查sku({ ids })
	// 	console.log('查sku res: ', res);
	// 	单项组.value.forEach((item) => {
	// 		let 对应sku = util.查找元素(res.data.list, item.skuId)
	// 		util.加入属性(item, 对应sku)
	// 		// for (const key in 取值对象) {
	// 		// 	目标对象[key] = 取值对象[key]
	// 		// }
	// 		// item.kk="ppp"
	// 		console.log('加入属性 后: ');
	// 	});
	// }

	初始化()
	// onMounted(() => {
	// 	初始化()
	// });

	watch(hasLogin, () => {
		console.log('购物车监听到 登录状态变化了: ');
		if (!hasLogin.value) {
			单项组.length = 0
		} else {
			初始化()
		}
	})

	function 删(id) {
		util.删除元素(单项组, id)
		api.删({ id })
	}

	async function 下单(param) {
		const res = await api.下单(param)
		return res
	}

	watch(单项组, () => {
		console.log('单项组 变化了: ', 单项组);
	})

	const 选中金额 = computed(() => {
		return 选中组.value
			.reduce((sum, item) => sum + item.数量 * item.价格, 0)
			.toFixed(2);
	});

	return {
		直接下单项,
		选中金额,
		显示否,
		选中组,
		// a,
		下单,
		删,
		增或改,
		单项组,
	}
})